package db;

import antlr.collections.*;

import java.util.*;
import java.net.URL;
import java.io.*;

import org.xml.sax.helpers.DefaultHandler;

import ptolemy.kernel.ComponentEntity;
import ptolemy.kernel.util.Attribute;

import util.*;
import MoC.*;
import JavaGrammar.*;

//////////////////////////////////////////////////////////////////////////
//// AtomicActorInfo
/**
    * Tenho que dar uma solucao melhor para quando nao for possivel
    carregar uma dada classe.
    
    A lista _classes esta em ordem subindo o nivel de hierarquia.

    * Modificacao : o nome passa a ser o nome da instancia. Assim, cada
    instancia de um mesmo ator, tem entradas diferentes. O actorClassMap
    que eh criado na VerifierEffigy deve ser usado quando processando
    apenas as classes dos atores, e nao as instancias.
    
@author Ivan Jeukens
@version v 0.1 03/10/2001
*/
public class AtomicActorInfo extends dbInfo {

    public AtomicActorInfo(DataBase classDB, DataBase classDataDB,
            ComponentEntity actor) {
        super();

        _classDB = classDB;
        _classDataDB = classDataDB;
       
        _actorClass = actor.getClass();

        _name = actor.getFullName();
        _build(actor);
        _actor = actor;
    }

    ///////////////////////////////////////////////////////////////////
    ////                        public methods                     ////

    public ClassResult getResult() {
        return _rootClassInfo.getResult();
    }

    public Class getActorClass() {
        return _actorClass;
    }

    public ClassInfo getClassInfo() {
        return _rootClassInfo;
    }

    public ComponentEntity getActor() {
        return _actor;
    }

/*
    public void setClassDB(DataBase db) {
        _classDB = db;
    }
*/

    /*   deve ser do load 
    public void setName(String name) {
        _name = name;
    }

    public void setURL(URL url) {
        _url = url;
    } */

    ///////////////////////////////////////////////////////////////////
    ////                        private methods                    ////

     private void _build(ComponentEntity actor) {
        if(_classDB.contains(_actorClass.getName())) {
            _rootClassInfo = (ClassInfo) _classDB.getInfo(_actorClass.getName());
        }
        else {
            _rootClassInfo = new ClassInfo(_classDataDB, actor, _actorClass);
            _classDB.add(_rootClassInfo);
        }
     }

    ///////////////////////////////////////////////////////////////////
    ////                        private variables                  ////

    private ComponentEntity _actor;
    
    private DataBase _classDB;
    private DataBase _classDataDB;

    private ClassInfo _rootClassInfo;

    // A classe toplevel do atore em questao
    private Class _actorClass;
}
